# This file is adapted from the ascii8x8.py in the Allegro project
# hosted at https://github.com/vishnubob/allegro.

def draw_chr(ch, wall, foreground, background, x_offset=0, y_offset=0):
    """
    Draw an 8 x 8 ASCII character.

    ch: the ASCII integer for a character
    wall: Wall object
    foreground: a 3-element tuple of hsv values
    background: a 3-element tuple of hsv values
    x_offset: integer
    y_offset: integer
    """
    font = Font8x8[ord(ch)]
    for y, row in enumerate(font):
        for x, col in enumerate(row):
            if col == '#':
                wall.set_pixel(x + x_offset, y + y_offset, background)
            else:
                wall.set_pixel(x + x_offset, y + y_offset, foreground)

Font8x8 = (
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("########"),
    ("#### ###"),
    ("########")
  ),
  (
    ("### # ##"),
    ("### # ##"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("### # ##"),
    ("### # ##"),
    ("#       "),
    ("### # ##"),
    ("#       "),
    ("### # ##"),
    ("### # ##"),
    ("########")
  ),
  (
    ("#### ###"),
    ("###    #"),
    ("## # ###"),
    ("###   ##"),
    ("#### # #"),
    ("##    ##"),
    ("#### ###"),
    ("########")
  ),
  (
    ("########"),
    ("##  ## #"),
    ("##  # ##"),
    ("#### ###"),
    ("### #  #"),
    ("## ##  #"),
    ("########"),
    ("########")
  ),
  (
    ("###  ###"),
    ("## # ###"),
    ("### ####"),
    ("## # ###"),
    ("# ###  #"),
    ("# ### ##"),
    ("##   # #"),
    ("########")
  ),
  (
    ("#### ###"),
    ("#### ###"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("##### ##"),
    ("#### ###"),
    ("### ####"),
    ("### ####"),
    ("### ####"),
    ("#### ###"),
    ("##### ##"),
    ("########")
  ),
  (
    ("### ####"),
    ("#### ###"),
    ("##### ##"),
    ("##### ##"),
    ("##### ##"),
    ("#### ###"),
    ("### ####"),
    ("########")
  ),
  (
    ("#### ###"),
    ("# ## ## "),
    ("## # # #"),
    ("###   ##"),
    ("## # # #"),
    ("# ## ## "),
    ("#### ###"),
    ("########")
  ),
  (
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#       "),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("####  ##"),
    ("####  ##"),
    ("##### ##"),
    ("#### ###")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("#       "),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("####  ##"),
    ("####  ##"),
    ("########")
  ),
  (
    ("####### "),
    ("###### #"),
    ("##### ##"),
    ("#### ###"),
    ("### ####"),
    ("## #####"),
    ("# ######"),
    ("########")
  ),
  (
    ("###   ##"),
    ("## ### #"),
    ("## ### #"),
    ("## # # #"),
    ("## ### #"),
    ("## ### #"),
    ("###   ##"),
    ("########")
  ),
  (
    ("#### ###"),
    ("###  ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("###   ##"),
    ("########")
  ),
  (
    ("###   ##"),
    ("## ### #"),
    ("###### #"),
    ("##### ##"),
    ("#### ###"),
    ("### ####"),
    ("##     #"),
    ("########")
  ),
  (
    ("###   ##"),
    ("## ### #"),
    ("###### #"),
    ("####  ##"),
    ("###### #"),
    ("## ### #"),
    ("###   ##"),
    ("########")
  ),
  (
    ("####  ##"),
    ("### # ##"),
    ("## ## ##"),
    ("##     #"),
    ("##### ##"),
    ("##### ##"),
    ("####   #"),
    ("########")
  ),
  (
    ("##     #"),
    ("## #####"),
    ("## #####"),
    ("##    ##"),
    ("###### #"),
    ("## ### #"),
    ("###   ##"),
    ("########")
  ),
  (
    ("###   ##"),
    ("## ### #"),
    ("## #####"),
    ("##    ##"),
    ("## ### #"),
    ("## ### #"),
    ("###   ##"),
    ("########")
  ),
  (
    ("##     #"),
    ("###### #"),
    ("##### ##"),
    ("#### ###"),
    ("### ####"),
    ("### ####"),
    ("### ####"),
    ("########")
  ),
  (
    ("###   ##"),
    ("## ### #"),
    ("## ### #"),
    ("###   ##"),
    ("## ### #"),
    ("## ### #"),
    ("###   ##"),
    ("########")
  ),
  (
    ("###   ##"),
    ("## ### #"),
    ("## ### #"),
    ("###    #"),
    ("###### #"),
    ("## ### #"),
    ("###   ##"),
    ("########")
  ),
  (
    ("########"),
    ("####  ##"),
    ("####  ##"),
    ("########"),
    ("####  ##"),
    ("####  ##"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("####  ##"),
    ("####  ##"),
    ("########"),
    ("####  ##"),
    ("####  ##"),
    ("##### ##"),
    ("#### ###")
  ),
  (
    ("##### ##"),
    ("#### ###"),
    ("### ####"),
    ("## #####"),
    ("### ####"),
    ("#### ###"),
    ("##### ##"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("#       "),
    ("########"),
    ("#       "),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("## #####"),
    ("### ####"),
    ("#### ###"),
    ("##### ##"),
    ("#### ###"),
    ("### ####"),
    ("## #####"),
    ("########")
  ),
  (
    ("###   ##"),
    ("## ### #"),
    ("###### #"),
    ("##### ##"),
    ("#### ###"),
    ("########"),
    ("#### ###"),
    ("########")
  ),
  (
    ("###   ##"),
    ("## ### #"),
    ("## #   #"),
    ("## # # #"),
    ("## #   #"),
    ("## #####"),
    ("###   ##"),
    ("########")
  ),
  (
    ("###   ##"),
    ("## ### #"),
    ("## ### #"),
    ("##     #"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("########")
  ),
  (
    ("##    ##"),
    ("## ### #"),
    ("## ### #"),
    ("##    ##"),
    ("## ### #"),
    ("## ### #"),
    ("##    ##"),
    ("########")
  ),
  (
    ("###   ##"),
    ("## ### #"),
    ("## #####"),
    ("## #####"),
    ("## #####"),
    ("## ### #"),
    ("###   ##"),
    ("########")
  ),
  (
    ("##    ##"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("##    ##"),
    ("########")
  ),
  (
    ("##     #"),
    ("## #####"),
    ("## #####"),
    ("##    ##"),
    ("## #####"),
    ("## #####"),
    ("##     #"),
    ("########")
  ),
  (
    ("##     #"),
    ("## #####"),
    ("## #####"),
    ("##     #"),
    ("## #####"),
    ("## #####"),
    ("## #####"),
    ("########")
  ),
  (
    ("###   ##"),
    ("## ### #"),
    ("## #####"),
    ("## #   #"),
    ("## ### #"),
    ("## ### #"),
    ("###   ##"),
    ("########")
  ),
  (
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("##     #"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("########")
  ),
  (
    ("###   ##"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("###   ##"),
    ("########")
  ),
  (
    ("####   #"),
    ("##### ##"),
    ("##### ##"),
    ("##### ##"),
    ("## ## ##"),
    ("## ## ##"),
    ("###  ###"),
    ("########")
  ),
  (
    ("## ### #"),
    ("## ### #"),
    ("## ## ##"),
    ("##   ###"),
    ("## ## ##"),
    ("## ### #"),
    ("## ### #"),
    ("########")
  ),
  (
    ("### ####"),
    ("### ####"),
    ("### ####"),
    ("### ####"),
    ("### ####"),
    ("### ####"),
    ("###    #"),
    ("########")
  ),
  (
    ("# ##### "),
    ("#  ###  "),
    ("# # # # "),
    ("# ## ## "),
    ("# ##### "),
    ("# ##### "),
    ("# ##### "),
    ("########")
  ),
  (
    ("## ### #"),
    ("##  ## #"),
    ("## # # #"),
    ("## # # #"),
    ("## ##  #"),
    ("## ### #"),
    ("## ### #"),
    ("########")
  ),
  (
    ("###   ##"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("###   ##"),
    ("########")
  ),
  (
    ("###   ##"),
    ("### ## #"),
    ("### ## #"),
    ("###   ##"),
    ("### ####"),
    ("### ####"),
    ("### ####"),
    ("########")
  ),
  (
    ("###   ##"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("###   ##"),
    ("#####  #")
  ),
  (
    ("##    ##"),
    ("## ### #"),
    ("## ### #"),
    ("##    ##"),
    ("## # ###"),
    ("## ## ##"),
    ("## ### #"),
    ("########")
  ),
  (
    ("###   ##"),
    ("## ### #"),
    ("## #####"),
    ("###   ##"),
    ("###### #"),
    ("## ### #"),
    ("###   ##"),
    ("########")
  ),
  (
    ("##     #"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("########")
  ),
  (
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("###   ##"),
    ("########")
  ),
  (
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("### # ##"),
    ("### # ##"),
    ("#### ###"),
    ("#### ###"),
    ("########")
  ),
  (
    ("# ##### "),
    ("# ##### "),
    ("# ##### "),
    ("## # # #"),
    ("## # # #"),
    ("### # ##"),
    ("### # ##"),
    ("########")
  ),
  (
    ("###   ##"),
    ("### ####"),
    ("### ####"),
    ("### ####"),
    ("### ####"),
    ("### ####"),
    ("###   ##"),
    ("########")
  ),
  (
    ("# ######"),
    ("## #####"),
    ("### ####"),
    ("#### ###"),
    ("##### ##"),
    ("###### #"),
    ("####### "),
    ("########")
  ),
  (
    ("###   ##"),
    ("##### ##"),
    ("##### ##"),
    ("##### ##"),
    ("##### ##"),
    ("##### ##"),
    ("###   ##"),
    ("########")
  ),
  (
    ("#### ###"),
    ("### # ##"),
    ("## ### #"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("#       ")
  ),
  (
    ("### ####"),
    ("#### ###"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("###   ##"),
    ("###### #"),
    ("###    #"),
    ("## ### #"),
    ("## ### #"),
    ("###   # "),
    ("########")
  ),
  (
    ("### ####"),
    ("### ####"),
    ("###   ##"),
    ("### ## #"),
    ("### ## #"),
    ("### ## #"),
    ("## #  ##"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("###   ##"),
    ("## #####"),
    ("## #####"),
    ("## #####"),
    ("###   ##"),
    ("########")
  ),
  (
    ("###### #"),
    ("###### #"),
    ("####   #"),
    ("### ## #"),
    ("### ## #"),
    ("### ## #"),
    ("####  # "),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("###   ##"),
    ("## ### #"),
    ("##     #"),
    ("## #####"),
    ("###   ##"),
    ("########")
  ),
  (
    ("####  ##"),
    ("### ## #"),
    ("### ####"),
    ("##   ###"),
    ("### ####"),
    ("### ####"),
    ("### ####"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("###   # "),
    ("## ### #"),
    ("## ### #"),
    ("###    #"),
    ("###### #"),
    ("###   ##")
  ),
  (
    ("## #####"),
    ("## #####"),
    ("## #  ##"),
    ("##  ## #"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("########")
  ),
  (
    ("########"),
    ("#### ###"),
    ("########"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("########")
  ),
  (
    ("########"),
    ("#### ###"),
    ("########"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("##  ####")
  ),
  (
    ("## #####"),
    ("## #####"),
    ("## ## ##"),
    ("## # ###"),
    ("##  ####"),
    ("## # ###"),
    ("## ## ##"),
    ("########")
  ),
  (
    ("###  ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    (" #  #  #"),
    ("# ## ## "),
    ("# ## ## "),
    ("# ##### "),
    ("# ##### "),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("## #  ##"),
    ("### ## #"),
    ("### ## #"),
    ("### ## #"),
    ("### ## #"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("###   ##"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("###   ##"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("## #  ##"),
    ("### ## #"),
    ("### ## #"),
    ("###   ##"),
    ("### ####"),
    ("### ####")
  ),
  (
    ("########"),
    ("########"),
    ("###  # #"),
    ("## ## ##"),
    ("## ## ##"),
    ("###   ##"),
    ("##### ##"),
    ("##### ##")
  ),
  (
    ("########"),
    ("########"),
    ("## #  ##"),
    ("##  ####"),
    ("## #####"),
    ("## #####"),
    ("## #####"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("###   ##"),
    ("## #####"),
    ("###  ###"),
    ("##### ##"),
    ("##   ###"),
    ("########")
  ),
  (
    ("########"),
    ("#### ###"),
    ("###   ##"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("## ## ##"),
    ("## ## ##"),
    ("## ## ##"),
    ("## ## ##"),
    ("###  # #"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("## ### #"),
    ("## ### #"),
    ("## ### #"),
    ("### # ##"),
    ("#### ###"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("# ##### "),
    ("# ##### "),
    ("# ## ## "),
    ("# # # # "),
    ("## ### #"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("## ### #"),
    ("### # ##"),
    ("#### ###"),
    ("### # ##"),
    ("## ### #"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("### ## #"),
    ("### ## #"),
    ("### ## #"),
    ("####   #"),
    ("###### #"),
    ("###   ##")
  ),
  (
    ("########"),
    ("########"),
    ("##    ##"),
    ("##### ##"),
    ("#### ###"),
    ("### ####"),
    ("##    ##"),
    ("########")
  ),
  (
    ("####  ##"),
    ("### ####"),
    ("### ####"),
    ("## #####"),
    ("### ####"),
    ("### ####"),
    ("####  ##"),
    ("########")
  ),
  (
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("#### ###"),
    ("########")
  ),
  (
    ("##  ####"),
    ("#### ###"),
    ("#### ###"),
    ("##### ##"),
    ("#### ###"),
    ("#### ###"),
    ("##  ####"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("##  ####"),
    ("# ## ## "),
    ("#####  #"),
    ("########"),
    ("########"),
    ("########")
  ),
  (
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########"),
    ("########")
  )
)

